﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace Filter
{
    /// <summary>
    /// 格式判断、验证
    /// </summary>
    public class JSFormat
    {
        #region 判断整数

        /// <summary>
        /// 判断是否是正整数
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsPositiveInt(string val, string mark)
        {
            try
            {
                Regex reg = new Regex(@"^[1-9]\d*$");
                if (reg.IsMatch(val))
                {
                    return true;
                }
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是非正整数（包括0）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsNotPositiveInt(string val, string mark)
        {
            try
            {
                Regex reg = new Regex(@"^-[1-9]\d*|0$");
                if (reg.IsMatch(val))
                {
                    return true;
                }
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是负整数
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsNegativeInt(string val, string mark)
        {
            try
            {
                Regex reg = new Regex(@"^-[1-9]\d*$");
                if (reg.IsMatch(val))
                {
                    return true;
                }
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是非负整数（包括0）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsNotNegativeInt(string val, string mark)
        {
            try
            {
                Regex reg = new Regex(@"^[1-9]\d*|0$");
                if (reg.IsMatch(val))
                {
                    return true;
                }
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是整数（包括0）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsInt(string val, string mark)
        {
            try
            {
                Regex reg = new Regex(@"^-?[0-9]\d*$");
                if (reg.IsMatch(val))
                {
                    return true;
                }
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        #endregion

        #region 判断小数
        /// <summary>
        /// 判断是否是正浮点数（小数）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsPositiveFloat(string val, string mark)
        {
            try
            {
                Regex reg = new Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$");
                if (reg.IsMatch(val))
                {
                    return true;
                }
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是非正浮点数（小数）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsNotPositiveFloat(string val, string mark)
        {
            try
            {
                Regex reg = new Regex(@"^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$");
                if (reg.IsMatch(val))
                {
                    return true;
                }
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是负浮点数（小数）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsNegativeFloat(string val, string mark)
        {
            try
            {
                Regex reg = new Regex(@"^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$");
                if (reg.IsMatch(val))
                {
                    return true;
                }
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是非负浮点数（小数）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsNotNegativeFloat(string val, string mark)
        {
            try
            {
                Regex reg = new Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$");
                if (reg.IsMatch(val))
                {
                    return true;
                }
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是浮点数（小数）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsFloat(string val, string mark)
        {
            try
            {
                Regex reg = new Regex(@"^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$");
                if (reg.IsMatch(val))
                {
                    return true;
                }
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        #endregion

        #region 判断数字（同时判断整数、小数）

        /// <summary>
        /// 判断是否是正数字（正整数或正小数）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsPositiveNumber(string val, string mark)
        {
            try
            {
                if (IsPositiveInt(val, "") || IsPositiveFloat(val, ""))
                    return true;
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是非正数字（非正整数或非正小数）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsNotPositiveNumber(string val, string mark)
        {
            try
            {
                if (IsNotPositiveInt(val, "") || IsNotPositiveFloat(val, ""))
                    return true;
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是负数字（负整数或负小数）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsNegativeNumber(string val, string mark)
        {
            try
            {
                if (IsNegativeInt(val, "") || IsNegativeFloat(val, ""))
                    return true;
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是非负数字（非负整数或非负小数）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsNotNegativeNumber(string val, string mark)
        {
            try
            {
                if (IsNotNegativeInt(val, "") || IsNotNegativeFloat(val, ""))
                    return true;
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        /// <summary>
        /// 判断是否是数字（整数或小数，包括0）
        /// </summary>
        /// <param name="val">值</param>
        /// <param name="mark">提示</param>
        /// <returns>是否是正整数</returns>
        public static bool IsNumber(string val, string mark)
        {
            try
            {
                if (IsInt(val, "") || IsFloat(val, ""))
                    return true;
                else
                {
                    if (mark.Length > 0)
                        MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            catch
            {
                if (mark.Length > 0)
                    MessageBox.Show(mark + "不是一个有效的数字！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }

        #endregion
    }
}
